home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / help / api_test.c < prev    next >
C/C++ Source or Header  |  1995-07-29  |  11KB  |  369 lines

  1. /*-------------------------------------------------------------------------
  2.   Copyright (c) 1993                   The Santa Cruz Operation, Inc.
  3.   -------------------------------------------------------------------------
  4.   All rights reserved.  No part of this  program or publication may be
  5.   reproduced, transmitted, transcribed, stored  in a retrieval system,
  6.   or translated into any language or computer language, in any form or
  7.   by any  means,  electronic, mechanical, magnetic, optical, chemical,
  8.   biological, or otherwise, without the  prior written  permission of:
  9.  
  10.            The Santa Cruz Operation, Inc.  (408) 425-7222
  11.            400 Encinal St, Santa Cruz, CA  95060 USA
  12.   -------------------------------------------------------------------------
  13.  
  14.   SCCS  : @(#) api_test.c 11.1 94/09/23 
  15.   Author: Diane Walker
  16.   Date  : 24 Oct 1993
  17.  
  18.   Description:
  19.     This example demonstrates the use of the low-level help
  20.     api.  It uses the following four calls:
  21.         1) HelpOpen()
  22.         2) HelpDisplay()
  23.         3) HelpClose()
  24.     
  25.   Modification History:
  26.   M001, 09-Nov-93, dianew
  27.     Minor change to the menubar code.
  28.   M000, 24-Oct-93, dianew
  29.         Created this file.
  30.   -----------------------------------------------------------------------*/
  31.  
  32. #include <X11/Intrinsic.h>
  33. #include <X11/cursorfont.h>
  34. #include <Xm/Xm.h>
  35. #include <Xm/RowColumn.h>
  36. #include <Xm/PushB.h>
  37. #include <Xm/TextF.h>
  38. #include <Xm/Text.h>
  39. #include <Xm/Form.h>
  40. #include <Xm/CascadeB.h>
  41. #include <Xm/MessageB.h>
  42. #include <Xm/MwmUtil.h>
  43. #include <Xm/Label.h>
  44. #include <Xm/LabelG.h>
  45.  
  46. #include "api.h"
  47.  
  48. #define PATHLEN        1024
  49. #define CLASS_NAME    "Api_test"
  50.  
  51. static  XtPointer ClientHelpContext;
  52. static    Widget    TopWidget;
  53. static    Widget    FormDialog;
  54.  
  55.  
  56. /* Function Prototypes -----*/
  57. int     main(int, char *[]);
  58. static    void    buildTree(Widget, char **);
  59. static    void     exitCB(Widget, caddr_t, caddr_t);
  60. static    void     moreCB(Widget, caddr_t, caddr_t);
  61. static    void    create_simple_popup();
  62. static    void    okCB(Widget, Widget, caddr_t);
  63. static    void    showVersion(Widget, caddr_t, caddr_t);
  64. static    void    error(char *);
  65. static    void     helpCB(Widget, caddr_t, caddr_t);
  66. /* End Prototypes ----------*/
  67.  
  68. main(argc, argv)
  69. int argc;
  70. char *argv[];
  71. {
  72.     XtAppContext     appContext;
  73.     Cursor        wait_cursor;
  74.     XEvent         event;
  75.     int          i;
  76.     Display        *disp;
  77.     extern    char    *getcwd();
  78.  
  79.     printf("In App \n");
  80.  
  81.     TopWidget = XtAppInitialize(&appContext, "Api_test",
  82.             NULL, 0, &argc, argv, NULL, NULL, 0);
  83.  
  84.     disp = XtDisplay(TopWidget);
  85.     wait_cursor = XCreateFontCursor(disp, (unsigned) XC_watch);
  86.  
  87.     buildTree(TopWidget, argv) ;
  88.  
  89.     if (HelpOpen(&(ClientHelpContext), TopWidget, "api_book", 
  90.         (void (*) (Boolean)) NULL, error) != helpSuccess)
  91.     {
  92.         printf("HelpOpen failed!\n");
  93.         exit(0);
  94.     }
  95.  
  96.     XtRealizeWidget(TopWidget);
  97.  
  98.  
  99.     /*      -----XtMainLoop ();---- */
  100.         for (;;)
  101.         {
  102.                 XtAppNextEvent(appContext, &event);
  103.                 XtDispatchEvent(&event);
  104.         }
  105. }
  106.  
  107. static void
  108. buildTree(parent, argv)
  109. Widget      parent;
  110. char    *argv[];
  111. {
  112.     Widget  main_form, form, menu_bar;
  113.     Widget    file_cascade, file_menu, exit_button, save_button;
  114.     Widget    help_cascade, help_menu, version_button, help_button;
  115.     Widget    window_button, keys_button, index_button, tutorial_button;
  116.     Widget     w, c, rc;
  117.     Arg    args[10];
  118.     int    n;
  119.     char    *name;
  120.     int    helpFlag;
  121.  
  122.     
  123.         main_form = XtVaCreateManagedWidget( "mainWindow",
  124.                         xmFormWidgetClass, parent, NULL);
  125.  
  126.     XtAddCallback(main_form, XmNhelpCallback, helpCB, "main_form");
  127.  
  128.         menu_bar = XtVaCreateManagedWidget( "menu_bar",
  129.                     xmRowColumnWidgetClass, main_form,
  130.                     XmNrowColumnType, XmMENU_BAR,
  131.                     XmNtopAttachment, XmATTACH_FORM,
  132.                     XmNtopOffset, 0,
  133.                     XmNleftAttachment, XmATTACH_FORM,
  134.                     XmNleftOffset, 0,
  135.                     XmNrightAttachment, XmATTACH_FORM,
  136.                     XmNrightOffset, 0,
  137.                     NULL);
  138.  
  139.         file_cascade = XtVaCreateManagedWidget( "File", 
  140.                 xmCascadeButtonWidgetClass, menu_bar, NULL);
  141.  
  142.         file_menu = (Widget) XmCreatePulldownMenu( menu_bar, 
  143.                         "filePulldown", NULL, 0);
  144.  
  145.         XtVaSetValues( file_cascade, XmNsubMenuId, file_menu, NULL);
  146.  
  147.         save_button = XtVaCreateManagedWidget( "Save",
  148.                 xmPushButtonWidgetClass, file_menu, NULL);
  149.  
  150.         exit_button = XtVaCreateManagedWidget( "Exit",
  151.                 xmPushButtonWidgetClass, file_menu, NULL);
  152.  
  153.         XtAddCallback( exit_button, XmNactivateCallback, exitCB, NULL);
  154.  
  155.         /* Create the Help cascade button */
  156.         help_cascade = XtVaCreateManagedWidget("Help", 
  157.                 xmCascadeButtonWidgetClass, menu_bar, NULL);
  158.         XtVaSetValues( menu_bar, XmNmenuHelpWidget, help_cascade, NULL);
  159.  
  160.         help_menu = (Widget) XmCreatePulldownMenu( menu_bar,
  161.                                                 "helpPulldown", NULL, 0);
  162.         XtVaSetValues( help_cascade, XmNsubMenuId, help_menu, NULL);
  163.  
  164.         window_button = XtVaCreateManagedWidget( "On Window",
  165.                 xmPushButtonWidgetClass, help_menu, NULL);
  166.     XtAddCallback(window_button, XmNactivateCallback, helpCB, "on_window");
  167.  
  168.         keys_button = XtVaCreateManagedWidget( "On Keys",
  169.                 xmPushButtonWidgetClass, help_menu, NULL);
  170.     XtAddCallback(keys_button, XmNactivateCallback, helpCB,"on_keys");
  171.  
  172.         index_button = XtVaCreateManagedWidget( "Index",
  173.                 xmPushButtonWidgetClass, help_menu, NULL);
  174.     XtAddCallback(index_button, XmNactivateCallback, helpCB,"index");
  175.  
  176.         tutorial_button = XtVaCreateManagedWidget( "Tutorial",
  177.                 xmPushButtonWidgetClass, help_menu, NULL);
  178.     XtAddCallback(tutorial_button, XmNactivateCallback, helpCB,"Tutorial");
  179.  
  180.         version_button = XtVaCreateManagedWidget( "On Version",
  181.                 xmPushButtonWidgetClass, help_menu, NULL);
  182.     XtAddCallback(version_button, XmNactivateCallback, showVersion, "");
  183.  
  184.         help_button = XtVaCreateManagedWidget( "On Help",
  185.                 xmPushButtonWidgetClass, help_menu, NULL);
  186.     XtAddCallback(help_button, XmNactivateCallback, helpCB,"On_Help");
  187.  
  188.     form =  XtVaCreateManagedWidget( "form", xmFormWidgetClass, main_form,
  189.                 XmNtopAttachment, XmATTACH_WIDGET,
  190.                 XmNtopWidget, menu_bar,
  191.                 XmNtopOffset, 0,
  192.                 XmNleftAttachment, XmATTACH_FORM,
  193.                 XmNrightAttachment, XmATTACH_FORM,
  194.                 XmNbottomAttachment, XmATTACH_FORM,
  195.                 XmNleftOffset, 0,
  196.                 XmNrightOffset, 0,
  197.                 XmNbottomOffset, 0,
  198.                 XmNfractionBase, 100,
  199.                 NULL);
  200.  
  201.         rc = XtVaCreateManagedWidget( "rc", xmRowColumnWidgetClass,
  202.                 form, XmNorientation, XmHORIZONTAL, NULL);
  203.  
  204.     n = 0;
  205.     w = XmCreateLabel(rc, "api_test", args, n);
  206.     XtManageChild(w);
  207.  
  208.     n = 0;
  209.     w = XmCreatePushButton(rc, "More", args, n);
  210.     XtAddCallback(w, XmNactivateCallback, moreCB, NULL);
  211.     XtManageChild(w);
  212.  
  213. }
  214.  
  215. static void
  216. showVersion(w, junk1, junk2)
  217. Widget w;
  218. caddr_t    junk1, junk2;
  219. {
  220.     int     n;
  221.     Arg    args[5];
  222.     Widget    label, rc, button;
  223.     XmString vers_str;
  224.     static    Widget    form = NULL;
  225.  
  226.     if (!form) {
  227.         n = 0;
  228.         XtSetArg(args[n], XmNdialogStyle, XmDIALOG_MODELESS); n++;
  229.         form = XmCreateFormDialog(TopWidget, "VersionDialog",  
  230.                                 args, n);
  231.                 XtAddCallback(form, XmNhelpCallback, helpCB, "on_version");
  232.         n = 0;
  233.         XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  234.         XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  235.         XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  236.         XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  237.         rc = XmCreateRowColumn(form, "rc3", args, n);
  238.         XtManageChild(rc);
  239.  
  240.         n = 0;
  241.         vers_str = XmStringCreateLtoR("Version 1.0", 
  242.                         XmSTRING_DEFAULT_CHARSET);
  243.         XtSetArg(args[n], XmNlabelString, vers_str); n++;
  244.         label = XmCreateLabel(rc, "versionLabel", args, n);
  245.         XtManageChild(label);
  246.         XmStringFree(vers_str);
  247.  
  248.         n = 0;
  249.         button = XmCreatePushButton(rc, "OK", args, n);
  250.         XtAddCallback(button, XmNactivateCallback, okCB, form);
  251.         XtManageChild(button);
  252.     }
  253.     if (!XtIsManaged(form))
  254.         XtManageChild(form);
  255. }
  256.  
  257.  
  258. static void
  259. exitCB(w, junk1, junk2)
  260. Widget     w;
  261. caddr_t    junk1, junk2;
  262. {
  263.     HelpClose(ClientHelpContext);
  264.     exit(0);
  265. }
  266.  
  267. static void
  268. moreCB(w, junk1, junk2)
  269. Widget     w;
  270. caddr_t    junk1, junk2;
  271. {
  272.     if (!FormDialog)
  273.         create_simple_popup();
  274.     if (!XtIsManaged(FormDialog))
  275.         XtManageChild(FormDialog);
  276. }
  277.  
  278. static void
  279. create_simple_popup()
  280. {
  281.     Widget    rc, button, label, button2;
  282.     int    n;
  283.     Arg     args[5];
  284.  
  285.     n = 0;
  286.     XtSetArg(args[n], XmNdialogStyle, XmDIALOG_MODELESS); n++;
  287.     FormDialog = XmCreateFormDialog(TopWidget, "form_dialog",  args, n);
  288.  
  289.     XtAddCallback(FormDialog, XmNhelpCallback, helpCB, "more_dialog");
  290.     
  291.     n = 0;
  292.     XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  293.     XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  294.     XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  295.     XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  296.     rc = XmCreateRowColumn(FormDialog, "rc2", args, n);
  297.     XtManageChild(rc);
  298.     
  299.     n = 0;
  300.     label = XmCreateLabelGadget(rc, "Test_label", args, n);
  301.     XtManageChild(label);
  302.  
  303.  
  304.     n = 0;
  305.     button = XmCreatePushButton(rc, "OK", args, n);
  306.     XtAddCallback(button, XmNactivateCallback, okCB, FormDialog);
  307.     XtManageChild(button);
  308.  
  309.     n = 0;
  310.     button2 = XmCreatePushButton(rc, "Help", args, n);
  311.     XtAddCallback(button2, XmNactivateCallback, helpCB, "more_dialog_help");
  312.     XtManageChild(button2);
  313. }
  314.  
  315. static void
  316. okCB(w, form, junk2)
  317. Widget w, form;
  318. caddr_t junk2;
  319. {
  320.     XtUnmanageChild(form);
  321. }
  322.  
  323. static void
  324. error(err_string) 
  325. char *err_string;
  326. {
  327.     static    Widget    errorBox = NULL;
  328.     Widget        b;
  329.     Arg        args[6];
  330.     int        n;
  331.     XmString    xm_errstr;
  332.  
  333.     if (!errorBox) {
  334.         n = 0;
  335.         XtSetArg(args[n], XmNmessageAlignment, XmALIGNMENT_CENTER); n++;
  336.         XtSetArg(args[n], XmNresizePolicy, XmRESIZE_NONE); n++;
  337.         XtSetArg(args[n], XmNdialogStyle, 
  338.                 XmDIALOG_FULL_APPLICATION_MODAL); n++;
  339.         errorBox = XmCreateErrorDialog(TopWidget, "errors",
  340.                                 args, n);
  341.         XtVaSetValues(XtParent(errorBox),
  342.             XmNmwmDecorations, MWM_DECOR_TITLE + MWM_DECOR_BORDER,
  343.              NULL);
  344.  
  345.         /*  Unmanage cancel/help buttons */
  346.         b = XmMessageBoxGetChild(errorBox, XmDIALOG_CANCEL_BUTTON);
  347.         XtUnmanageChild(b);
  348.         b = XmMessageBoxGetChild(errorBox, XmDIALOG_HELP_BUTTON);
  349.         XtUnmanageChild(b);
  350.     }
  351.     xm_errstr = XmStringCreateLtoR(err_string, XmSTRING_DEFAULT_CHARSET);
  352.     XtVaSetValues(errorBox, XmNmessageString, xm_errstr, NULL);
  353.     XmStringFree(xm_errstr);
  354.  
  355.     if (!XtIsManaged(errorBox))
  356.         XtManageChild(errorBox); 
  357. }
  358.  
  359. static void
  360. helpCB(w, clientData, callData)
  361. Widget w;
  362. XtPointer clientData;
  363. XtPointer callData;
  364. {
  365.         char *topic = (char *) clientData;
  366.     HelpDisplay(ClientHelpContext, NULL, helpTopic, topic);
  367. }
  368.  
  369.